/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package worms;

import java.util.Scanner;
import java.util.regex.*;
import java.lang.String;

/**
 *
 * @author isen
 */
public class Worms {

    private static GameGrid carteP1 = new GameGrid();
    private static GameGrid carteP2 = new GameGrid();
    private static Player joueur1;
    private static Player joueur2;

    public static void main(String[] args) throws Throwable {
        clear();
        menu();
    }

    public static void menu() throws Throwable {
        int index = 0, menue = 0;
        do {
            Scanner keyboard = new Scanner(System.in);
            System.out.println("Bienvenue dans Worms");
            System.out.println("1: Commencer\n2: Quitter");
            try {
                menue = Integer.parseInt(keyboard.nextLine());
            } catch (NumberFormatException ex) {
                index = 0;
            }
            do {
                switch (menue) {
                    case 1:
                        clear();
                        game();
                        index = 2;
                        break;
                    case 2:
                        System.exit(0);
                        break;
                    default:
                        System.out.println("choix non valide !");
                        break;

                }
            } while (index == 1);
        } while (index == 0);
    }

    public static void game() throws Throwable {
        initialisation();
        int menu = 0;
        String x, y = null;
        int index;

        Scanner keyboard = new Scanner(System.in);
        do {
            do {
                index = 1;
                clear();
                joueur1.afficherCarte();
                System.out.println("Joueur1");
                System.out.println("1: Tirer\n2: Bouger Assaut\n3: Bouger Sniper\n4: Quitter");

                try {
                    menu = Integer.parseInt(keyboard.nextLine());
                } catch (NumberFormatException ex) {
                    index = 0;
                }
                switch (menu) {
                    case 1:
                        do {
                            System.out.println("1: Tirer avec Assaut\n2: Tirer avec Sniper");
                            x = keyboard.nextLine();
                        } while (!Pattern.matches("[12]", x) || x.length() == 0);
                        switch (Integer.parseInt(x)) {
                            case 1:
                                do {
                                    System.out.println("Entrer la position x ");
                                    x = keyboard.nextLine();
                                } while (!Pattern.matches("[0-9]{1,2}", x) || x.length() == 0 || Integer.parseInt(x) < 1 || Integer.parseInt(x) > 10);
                                do {
                                    System.out.println("Entrer la position y ");
                                    y = keyboard.nextLine();
                                } while (!Pattern.matches("[0-9]{1,2}", y) || y.length() == 0 || Integer.parseInt(y) < 1 || Integer.parseInt(y) > 10);

                                joueur1.getAssaut().tirer(joueur2, joueur1.getAssaut(), Integer.parseInt(x), Integer.parseInt(y));
                                break;
                            case 2:
                                do {
                                    System.out.println("Entrer la position x ");
                                    x = keyboard.nextLine();
                                } while (!Pattern.matches("[0-9]{1,2}", x) || x.length() == 0 || Integer.parseInt(x) < 1 || Integer.parseInt(x) > 10);
                                do {
                                    System.out.println("Entrer la position y ");
                                    y = keyboard.nextLine();
                                } while (!Pattern.matches("[0-9]{1,2}", y) || y.length() == 0 || Integer.parseInt(y) < 1 || Integer.parseInt(y) > 10);
                                joueur1.getSniper().tirer(joueur2, joueur1.getSniper(), Integer.parseInt(x), Integer.parseInt(y));
                                break;

                            default:
                                index = 0;
                                System.out.println("choix non valide !");
                                break;
                        }

                        break;
                    case 2:
                        joueur1.getAssaut().bouger();
                        break;
                    case 3:
                        joueur1.getSniper().bouger();
                        break;
                    case 4:
                        System.exit(0);
                        break;
                    default:
                        index = 0;
                        System.out.println("choix non valide !");
                        break;
                }
            } while (index == 0);

            do {
                index = 1;
                
                joueur2.afficherCarte();
                System.out.println("Joueur2");
                System.out.println("1: Tirer\n2: Bouger Assaut\n3: Bouger Sniper\n4: Quitter");
                try {
                    menu = Integer.parseInt(keyboard.nextLine());
                } catch (NumberFormatException ex) {
                    index = 0;
                }
                switch (menu) {
                    case 1:
                        do {
                            System.out.println("1: Tirer avec Assaut\n2: Tirer avec Sniper");
                            x = keyboard.nextLine();
                        } while (!Pattern.matches("[12]", x) || x.length() == 0); // Accepte soit 1 soit2
                        switch (Integer.parseInt(x)) {
                            case 1:
                                do {
                                    System.out.println("Entrer la position x ");
                                    x = keyboard.nextLine();
                                } while (!Pattern.matches("[0-9]{1,2}", x) || x.length() == 0 || Integer.parseInt(x) < 1 || Integer.parseInt(x) > 10);
                                // accepte uniquement 2 caractère numériques compris entre 0 et 9
                                // accepte au final avec autres conditions un int entre 1 et 10
                                do {
                                    System.out.println("Entrer la position y ");
                                    y = keyboard.nextLine();
                                } while (!Pattern.matches("[0-9]{1,2}", y) || y.length() == 0 || Integer.parseInt(y) < 1 || Integer.parseInt(y) > 10);
                                joueur2.getAssaut().tirer(joueur1, joueur2.getAssaut(), Integer.parseInt(x), Integer.parseInt(y));
                                break;
                            case 2:
                                do {
                                    System.out.println("Entrer la position x ");
                                    x = keyboard.nextLine();
                                } while (!Pattern.matches("[0-9]{1,2}", x) || x.length() == 0 || Integer.parseInt(x) < 1 || Integer.parseInt(x) > 10);
                                do {
                                    System.out.println("Entrer la position y ");
                                    y = keyboard.nextLine();
                                } while (!Pattern.matches("[0-9]{1,2}", y) || y.length() == 0 || Integer.parseInt(y) < 1 || Integer.parseInt(y) > 10);
                                break;

                            default:
                                index = 0;
                                System.out.println("choix non valide !");
                                break;
                        }

                        break;
                    case 2:
                        joueur2.getAssaut().bouger();
                        break;
                    case 3:
                        joueur2.getSniper().bouger();
                        break;
                    case 4:
                        System.exit(0);
                        break;
                    default:
                        index = 0;
                        System.out.println("choix non valide !");
                        break;
                }
            } while (index == 0);
        } while (joueur1.loose() != true && joueur2.loose() != true);
        if (joueur1.loose() == true) {
            System.out.println(joueur2.getName() + " gagne");
        } else {
            System.out.println(joueur1.getName() + " gagne");
        }


    }

    public static void initialisation() throws Throwable {
        String name = null;
        Scanner keyboard = new Scanner(System.in);
        do {
            System.out.println("Entrer le nom du Joueur 1");//initialisation du premier joueur
            name = keyboard.nextLine();
            if (!Pattern.matches("\\p{L}*(-\\p{L}*)*", name) || name.length() == 0) { // Accepte seulment les noms sans accents (composé et majuscule autorisés)
                System.out.println("Erreur : Saisie incorrecte");
            }
        } while (!Pattern.matches("\\p{L}*(-\\p{L}*)*", name) || name.length() == 0);

        joueur1 = new Player(name, carteP1);
        do {
            System.out.println("Entrer le nom du Joueur 2");//initialisation du second joueur
            name = keyboard.nextLine();
            if (!Pattern.matches("\\p{L}*(-\\p{L}*)*", name) || name.length() == 0) {
                System.out.println("Erreur : Saisie incorrecte");
            }
        } while (!Pattern.matches("\\p{L}*(-\\p{L}*)*", name) || name.length() == 0);
        joueur2 = new Player(name, carteP2);
        clear();
        insertionWorms();
    }

    public static void insertionWorms() throws Throwable {
        joueur1.placeWorms();
        joueur2.placeWorms();
    }

    public static void clear() {
        try {
            if (System.getProperty("os.name").startsWith("Windows")) {
                Runtime.getRuntime().exec("cls");
            } else {
                Runtime.getRuntime().exec("clear");
            }
        } catch (Exception excpt) {
            for (int i = 0; i < 100; i++) {
                System.out.println();
            }
        }
    }
}
